﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using MakeIT.MiraPark.Negocios;

namespace MiraPark
{
    public partial class FormCadastroCliente : Form
    {
        private string operacao = "";

        public FormCadastroCliente()
        {
            InitializeComponent();
        }

        private void FormCadastroCliente_Load(object sender, EventArgs e)
        {
            //Popular a lista de clientes cadastrados
            this.dataGridViewClientes.DataSource = ModelBO.getClientes();
            setupButtonsControls();
        }

        private void dataGridViewCliente_SelectionChanged(object sender, EventArgs e)
        {
            setupButtonsControls();
        }

        private void buttonNovo_Click(object sender, EventArgs e)
        {
            this.operacao = "novo";
            setupButtonsControls();
        }

        private void buttonCancelar_Click(object sender, EventArgs e)
        {
            this.operacao = "cancelar";
            setupButtonsControls();
        }

        private void buttonEditar_Click(object sender, EventArgs e)
        {
            this.operacao = "editar";
            setupButtonsControls();
        }

        private void buttonExcluir_Click(object sender, EventArgs e)
        {
            List<ClienteVO> clienteList = (List<ClienteVO>)this.dataGridViewClientes.DataSource;
            ClienteVO cliente = clienteList[this.dataGridViewClientes.CurrentRow.Index];

            if (!ModelBO.readyToDeleteCliente(cliente.idCliente))
            {
                MessageBox.Show(this, "Cliente não pode ser excluído pois já está associado a Alertas e/ou Convênios e/ou Mensalistas", "Aviso");
                return;
            }

            this.operacao = "excluir";

            DialogResult dr = MessageBox.Show(this, "Confirma a exclusão do cliente " + cliente.nome, "Confirmação", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (dr.ToString().Equals("Yes"))
            {
                ModelBO.delCliente(cliente);

                int nRow = this.dataGridViewClientes.CurrentRow.Index;
                this.dataGridViewClientes.DataSource = ModelBO.getClientes();
                if (this.dataGridViewClientes.Rows.Count > 0)
                {
                    dataGridViewClientes.CurrentCell = dataGridViewClientes.Rows[Math.Min(nRow, this.dataGridViewClientes.Rows.Count - 1)].Cells[0];
                    dataGridViewClientes.Rows[Math.Min(nRow, this.dataGridViewClientes.Rows.Count - 1)].Selected = true;
                }

                setupButtonsControls();
            }
        }

        private void buttonSalvar_Click(object sender, EventArgs e)
        {
            String erros = "";
            if (this.textBoxCliente.Text.Trim().Length == 0)
                erros = erros + "Cliente deve ser informado.\r\n";
            if (this.textBoxCNPJ.Text.Trim().Length==0 && this.textBoxCPF.Text.Trim().Length == 0)
                erros = erros + "CPF ou CNPJ deve ser informado.\r\n";

            if (erros.Length > 0)
            {
                MessageBox.Show(this, erros, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            ClienteVO cliente = null;

            if (this.operacao.Equals("novo"))
            {

                cliente = ClienteVO.CreateClienteVO();
                cliente.CPF = this.textBoxCPF.Text;
                cliente.CNPJ = this.textBoxCNPJ.Text;
                cliente.IE = this.textBoxIE.Text;
                cliente.IM = this.textBoxIM.Text;
                cliente.nome = this.textBoxCliente.Text;
                cliente.endereco = this.textBoxEndereco.Text;
                cliente.enderecoNumero = this.textBoxEnderecoNumero.Text;
                cliente.complemento = this.textBoxComplemento.Text;
                cliente.bairro = this.textBoxBairro.Text;
                cliente.cidade = this.textBoxCidade.Text;
                cliente.UF = this.textBoxUF.Text;
                cliente.pais = this.textBoxPais.Text;
                cliente.SMS = this.textBoxSMS.Text;
                cliente.email = this.textBoxEmail.Text;
                cliente.telefone1 = this.textBoxTelefone1.Text;
                cliente.telefone2 = this.textBoxTelefone2.Text;
                cliente.telefone3 = this.textBoxTelefone3.Text;
                cliente.ativo = this.checkBoxAtivo.Checked;
                cliente.contato = this.textBoxContato.Text;
                cliente.responsavel = this.textBoxResponsavel.Text;

                cliente.idCliente = (int)ModelBO.newCliente(cliente);
            }
            if (this.operacao.Equals("editar"))
            {
                List<ClienteVO> clienteList = (List<ClienteVO>)this.dataGridViewClientes.DataSource;
                cliente = clienteList[this.dataGridViewClientes.CurrentRow.Index];

                cliente.CPF = this.textBoxCPF.Text;
                cliente.CNPJ = this.textBoxCNPJ.Text;
                cliente.IE = this.textBoxIE.Text;
                cliente.IM = this.textBoxIM.Text;
                cliente.nome = this.textBoxCliente.Text;
                cliente.endereco = this.textBoxEndereco.Text;
                cliente.enderecoNumero = this.textBoxEnderecoNumero.Text;
                cliente.complemento = this.textBoxComplemento.Text;
                cliente.bairro = this.textBoxBairro.Text;
                cliente.cidade = this.textBoxCidade.Text;
                cliente.UF = this.textBoxUF.Text;
                cliente.pais = this.textBoxPais.Text;
                cliente.SMS = this.textBoxSMS.Text;
                cliente.email = this.textBoxEmail.Text;
                cliente.telefone1 = this.textBoxTelefone1.Text;
                cliente.telefone2 = this.textBoxTelefone2.Text;
                cliente.telefone3 = this.textBoxTelefone3.Text;
                cliente.ativo = this.checkBoxAtivo.Checked;
                cliente.contato = this.textBoxContato.Text;
                cliente.responsavel = this.textBoxResponsavel.Text;

                ModelBO.setCliente(cliente);
            }
            this.operacao = "salvar";

            List<ClienteVO> listClienteVOs = ModelBO.getClientes();
            dataGridViewClientes.DataSource = listClienteVOs;
            int nRow = listClienteVOs.FindIndex(a => a.idCliente == cliente.idCliente);
            dataGridViewClientes.CurrentCell = dataGridViewClientes.Rows[nRow].Cells[0];
            dataGridViewClientes.Rows[nRow].Selected = true;

            setupButtonsControls();
        }


        private void setupButtonsControls()
        {
            bool haRows = this.dataGridViewClientes.Rows.Count > 0 && this.dataGridViewClientes.CurrentRow!=null;
            bool novo = this.operacao.Equals("novo");
            bool edit = this.operacao.Equals("editar");
            bool canc = this.operacao.Equals("cancelar");

            this.buttonCancelar.Enabled = novo || edit;
            this.buttonNovo.Enabled = !novo && !edit;
            this.buttonEditar.Enabled = haRows && !novo && !edit;
            this.buttonExcluir.Enabled = haRows && !novo && !edit;
            this.buttonSalvar.Enabled = novo || edit;

            this.textBoxCPF.Enabled = novo || edit;
            this.textBoxCNPJ.Enabled = novo || edit;
            this.textBoxIE.Enabled = novo || edit;
            this.textBoxIM.Enabled = novo || edit;
            this.textBoxCliente.Enabled = novo || edit;
            this.textBoxEndereco.Enabled = novo || edit;
            this.textBoxEnderecoNumero.Enabled = novo || edit;
            this.textBoxComplemento.Enabled = novo || edit;
            this.textBoxBairro.Enabled = novo || edit;
            this.textBoxCidade.Enabled = novo || edit;
            this.textBoxUF.Enabled = novo || edit;
            this.textBoxPais.Enabled = novo || edit;
            this.textBoxSMS.Enabled = novo || edit;
            this.textBoxEmail.Enabled = novo || edit;
            this.textBoxTelefone1.Enabled = novo || edit;
            this.textBoxTelefone2.Enabled = novo || edit;
            this.textBoxTelefone3.Enabled = novo || edit;
            this.checkBoxAtivo.Enabled = novo || edit;
            this.textBoxContato.Enabled = novo || edit;
            this.textBoxResponsavel.Enabled = novo || edit;

            this.dataGridViewClientes.Enabled = !novo && !edit;

            if (!haRows || novo)
            {
                this.textBoxId.Text = "";
                this.textBoxCPF.Text = "";
                this.textBoxCNPJ.Text = "";
                this.textBoxIE.Text = "";
                this.textBoxIM.Text = "";
                this.textBoxCliente.Text = "";
                this.textBoxEndereco.Text = "";
                this.textBoxEnderecoNumero.Text = "";
                this.textBoxComplemento.Text = "";
                this.textBoxBairro.Text = "";
                this.textBoxCidade.Text = "";
                this.textBoxUF.Text = "";
                this.textBoxPais.Text = "";
                this.textBoxSMS.Text = "";
                this.textBoxEmail.Text = "";
                this.textBoxTelefone1.Text = "";
                this.textBoxTelefone2.Text = "";
                this.textBoxTelefone3.Text = "";
                this.checkBoxAtivo.Checked = false;
                this.textBoxContato.Text = "";
                this.textBoxResponsavel.Text = "";

            }
            else {
                List<ClienteVO> clienteList = (List<ClienteVO>)this.dataGridViewClientes.DataSource;
                ClienteVO cliente = clienteList[this.dataGridViewClientes.CurrentRow.Index];
                this.textBoxId.Text = cliente.idCliente.ToString();
                this.textBoxCPF.Text = cliente.CPF;
                this.textBoxCNPJ.Text = cliente.CNPJ;
                this.textBoxIE.Text = cliente.IE;
                this.textBoxIM.Text = cliente.IM;
                this.textBoxCliente.Text = cliente.nome;
                this.textBoxEndereco.Text = cliente.endereco;
                this.textBoxEnderecoNumero.Text = cliente.enderecoNumero;
                this.textBoxComplemento.Text = cliente.complemento;
                this.textBoxBairro.Text = cliente.bairro;
                this.textBoxCidade.Text = cliente.cidade;
                this.textBoxUF.Text = cliente.UF;
                this.textBoxPais.Text = cliente.pais;
                this.textBoxSMS.Text = cliente.SMS;
                this.textBoxEmail.Text = cliente.email;
                this.textBoxTelefone1.Text = cliente.telefone1;
                this.textBoxTelefone2.Text = cliente.telefone2;
                this.textBoxTelefone3.Text = cliente.telefone3;
                this.checkBoxAtivo.Checked = cliente.ativo;
                this.textBoxContato.Text = cliente.contato;
                this.textBoxResponsavel.Text = cliente.responsavel;

            }
            if (novo || edit){
                this.textBoxCliente.Focus();
            }
        }

        private void buttonListagem_Click(object sender, EventArgs e)
        {
            FormReportCliente formx = new FormReportCliente();
            formx.MdiParent = this.MdiParent;
            formx.Show();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            FormReportCliente formx = new FormReportCliente();
            formx.MdiParent = this.MdiParent;
            formx.setTipo("FichaCadastral");
            formx.Show();

        }

     }
}
